package com.tao.YanMoDesignPattern.template.callBack;


import com.tao.YanMoDesignPattern.template.case1_extend.LoginModel;

/**
 * @Author Mi_Tao
 * @Date 2023/7/22
 * @Description
 * @Version 1.0
 **/
public class Client {

    public static void main(String[] args) {
        // 准备登陆人信息
        LoginModel lm = new LoginModel();
        lm.setLoginId("admin");
        lm.setPwd("workerpwd");
        // 准备用来判断的对象
        LoginTemplate t1 = new LoginTemplate();

        // 进行登陆测试，先测试普通人员登陆
        boolean login = t1.login(lm, new LoginCallback() {
            @Override
            public LoginModel findLoginUser(String loginId) {
                LoginModel lm = new LoginModel();
                lm.setLoginId(loginId);
                lm.setPwd("testpwd");
                return lm;
            }

            @Override
            public String encryptPwd(String pwd, LoginTemplate loginTemplate) {
                // 直接调用模板中的实现
                return loginTemplate.encryptPwd(pwd);
            }

            @Override
            public boolean match(LoginModel lm, LoginModel dbLm, LoginTemplate loginTemplate) {
                return loginTemplate.match(lm, dbLm);
            }
        });

        System.out.println("进行普通人员登陆:"+login);

        boolean flag = t1.login(lm, new LoginCallback() {
            @Override
            public LoginModel findLoginUser(String loginId) {
                LoginModel lm = new LoginModel();
                lm.setLoginId(loginId);
                lm.setPwd("workerpwd");
                return lm;
            }

            @Override
            public String encryptPwd(String pwd, LoginTemplate loginTemplate) {
                // 覆盖父类方法
                System.out.println("使用MD5 进行加密");
                return pwd;
            }

            @Override
            public boolean match(LoginModel lm, LoginModel dbLm, LoginTemplate loginTemplate) {
                return loginTemplate.match(lm, dbLm);
            }
        });
        System.out.println("可以登陆工作平台:"+flag);
    }
}
